Skip to content

SecOps - 41040 - Tenant Allow/Block List entries are scoped, time-bounded, and free of broad allow rules - #1492

Draft
Naga Praneeth Chukka (praneeth-0000) wants to merge 1 commit into
devfrom
Feature-41040
Draft

SecOps - 41040 - Tenant Allow/Block List entries are scoped, time-bounded, and free of broad allow rules#1492
Naga Praneeth Chukka (praneeth-0000) wants to merge 1 commit into
devfrom
Feature-41040

Conversation

@praneeth-0000

Copy link
Copy Markdown
Collaborator

No description provided.

Copilot AI lite review requested due to automatic review settings August 7, 2026 11:39
@praneeth-0000
Naga Praneeth Chukka (praneeth-0000) changed the base branch from main to dev August 7, 2026 11:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new SecOps assessment (41040) to evaluate Tenant Allow/Block List (TABL) “allow” hygiene in Exchange Online / MDO, producing a drift summary and an action table for flagged entries.

Changes:

  • Introduces Test-Assessment-41040 to query TABL entries (Sender/Url/FileHash/IP), classify admin-controlled allow entries, and emit markdown results with drift metrics.
  • Adds the companion Test-Assessment.41040.md description/remediation content used in reporting.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

File Description
src/powershell/tests/Test-Assessment.41040.ps1 New assessment logic + markdown report generation for TABL allow-entry hygiene.
src/powershell/tests/Test-Assessment.41040.md New test narrative/remediation links and %TestResult% placeholder.

| :----- | ----: | :----- |
$driftRows

AdvancedDelivery and Submission entries, plus spoofed-sender allows governed separately through Get-TenantAllowBlockListSpoofItems, are represented by the excluded count above and never affect the verdict.
Comment on lines +281 to +285
$expirationDisplay = if ($row.IsUnbounded) {
'No expiration'
} else {
Get-FormattedDate -DateString ($row.ExpirationDate.ToString('o'))
}
Comment on lines +269 to +279
$valueRaw = ([string]$row.Value) -replace '[\r\n]+', ' '
$valueDisplay = if ($valueRaw.Length -gt 50) { $valueRaw.Substring(0, 47) + '...' } else { $valueRaw }
$valueDisplay = Get-SafeMarkdown -Text $valueDisplay

$notesRaw = if ($null -ne $row.Notes) { (([string]$row.Notes).Trim() -replace '[\r\n]+', ' ') } else { '' }
$notesDisplay = if ([string]::IsNullOrWhiteSpace($notesRaw)) { '—' } `
elseif ($notesRaw.Length -gt 80) { $notesRaw.Substring(0, 77) + '...' } `
else { $notesRaw }
if ($notesDisplay -ne '—') {
$notesDisplay = Get-SafeMarkdown -Text $notesDisplay
}
Comment on lines +123 to +131
$allAllow = @($allEntries | Where-Object { $_.Action -eq 'Allow' })
$allBlock = @($allEntries | Where-Object { $_.Action -eq 'Block' })

$exemptEntries = @($allAllow | Where-Object {
$_.ListSubType -in @('AdvancedDelivery', 'Submission')
})
$adminControlledAllow = @($allAllow | Where-Object {
$_.ListSubType -eq 'Tenant'
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants